package com.sann.spring.service.impl;

import com.sann.spring.dao.IAccountDao;
import com.sann.spring.factory.BeanFactory;
import com.sann.spring.service.IAccountService;
import lombok.extern.slf4j.Slf4j;


@Slf4j
public class AccountServiceImpl implements IAccountService {

    // 1.正常依赖dao对象写法，通过手动new一个
    //    IAccountDao dao = new AccountDaoImpl();

    // 构造函数是用来给对象初始化的，先有对象（根据类的字节码创建），后参照构造函数初始化该对象,而不是根据构造函数创建对象。
    public AccountServiceImpl(){
        dao = (IAccountDao) BeanFactory.getSingletonBean("accountDao");
        log.info("---Service中获取dao：{}-----this：{}",dao,this);
    }

    // 2.通过工厂方法获取依赖的dao对象
//    public IAccountDao dao = (IAccountDao)BeanFactory.getSingletonBean("accountDao");
    // MYNOTICE 通过Class.forName()反射实例化的Bean，只会调用默认构造函数实例化这个Bean，至于Bean中的其余属性不会被实例化
    private IAccountDao dao ;



    @Override
    public void saveAccount() {
        log.info("调用dao:{}",dao);
        dao.saveAccount();
    }
}
